package br.usp.ime.comercioeletronico.modelo;

import org.nakedobjects.extended.Cardinality;
import org.nakedobjects.extended.CompositeAssociation;
import org.nakedobjects.extended.Entity;
import org.nakedobjects.extended.RelationshipObject;
import org.nakedobjects.extended.Way;
import org.nakedobjects.extended.CompositeAssociation.CompositeType;
import org.nakedobjects.object.AbstractNakedObject;
import org.nakedobjects.object.Title;
import org.nakedobjects.object.collection.ExtendedInternalCollection;
import org.nakedobjects.object.value.TextString;

@Entity
public class Produto extends AbstractNakedObject {

	private static final long serialVersionUID = 1L;

	private TextString nome = new TextString();
	
	@CompositeAssociation(
			cardinality = Cardinality.OneToMany, 
			compositeType = CompositeType.Physical, 
			fieldRelatedName = "produtosPai", 
			relatedWith = Produto.class, 
			way = Way.TwoWay 
			)
	private final ExtendedInternalCollection produtos = new ExtendedInternalCollection(
			"Produtos", Produto.class, this);
			
	public ExtendedInternalCollection getProdutos() {
		return produtos;
	}
	
	private final ExtendedInternalCollection categorias = new ExtendedInternalCollection(
			"Categorias", Categoria.class, this);
	public ExtendedInternalCollection getCategorias() {
		return categorias;
	}
	
	private final ExtendedInternalCollection itenspedidos = new ExtendedInternalCollection(
			"Itenspedidos", ItemPedido.class, this);
	
	public ExtendedInternalCollection getItenspedidos() {
		return itenspedidos;
	}
	
	private final ExtendedInternalCollection notasfiscais = new ExtendedInternalCollection(
			"Notasfiscais", NotaFiscal.class, this);
	
	public ExtendedInternalCollection getNotasfiscais() {
		return notasfiscais;
	}

	private Produto produtosPai;
	
	public void setProdutosPai(Produto produtosPai) {
		this.produtosPai = produtosPai;
		objectChanged();
	}
	public Produto getProdutosPai() {
		resolve(produtosPai);
		return produtosPai;
	}
	
	private final ExtendedInternalCollection fornecedores = new ExtendedInternalCollection(
			"Fornecedores", Fornecedor.class, this);

	public ExtendedInternalCollection getFornecedores() {
		return fornecedores;
	}

	public TextString getNome() {
		return nome;
	}

	public Title title() {
		return getNome().title();
	}

}
